package chapter5.homework.heima.Q3updateFiles;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @Project ：learn_java
 * @File ：Server.java
 * @IDE ：IntelliJ IDEA
 * @Author ：自由如风间
 * @Date ：2025/3/16 11:21
 * @Description ：
 * 服务器：接收客户端上传的文件，上传完毕之后给出反馈
 * 客户端：将本地文件上传到服务器，接收服务器的反馈
 * @DEBUG: 在服务器端文件接收完成后，要调用 bos.flush() 确保所有缓冲区中的数据都被写入目标文件，
 * 最初的代码因为缺乏flush代码导致文件破损
 */

public class Server {
    public static void main(String[] args) throws IOException {

        // 这里使用10086是因为原先的10000端口正在使用中，随便选的一个空闲端口
        int samePort = 10086;
        ServerSocket ss = new ServerSocket(samePort);
        Socket socket = ss.accept();

        String saveDir = "G:\\codes\\learn_java\\src\\chapter5\\ServerDir\\aoa.webp";

        BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(saveDir));

        byte[] bytes = new byte[1024];
        int len;
        while ((len = bis.read(bytes)) != -1) {
            bos.write(bytes, 0, len);
        }
        // DEBUG: 最开始的代码因为缺少这行代码导致复制的文件破损无法打开。
        bos.flush();

        // 回写数据
        // 包装顺序： 字节流 -> 字符流 -> 缓冲流
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bw.write("上传成功");
        bw.newLine();
        bw.flush();

        // 释放资源
        socket.close();
        ss.close();
    }
}
